#include "utils.h"

QPair<bool, QString> Utils::hexToUtf8(const QString& hex)
{
    // 移除可能的空格或分隔符（如" "或":"）
    QString cleanedHex = hex;
    cleanedHex.remove(' ').remove(':');

    // 检查长度是否为偶数（每两个16进制字符表示一个ASCII字符）
    if (cleanedHex.length() % 2 != 0) {
        return qMakePair(false, QString());
    }

    // 将16进制字符串转换为QByteArray
    QByteArray byteArray;
    for (int i = 0; i < cleanedHex.length(); i += 2) {
        bool ok;
        // 将两个16进制字符转换为一个字节
        char byte = cleanedHex.mid(i, 2).toShort(&ok, 16);
        if (!ok) {
            return qMakePair(false, QString());
        }
        byteArray.append(byte);
    }

    // 将QByteArray转换为ASCII字符串
    return qMakePair(true, QString::fromUtf8(byteArray));
}

QString Utils::utf8ToHex(const QString& input)
{
    // 将QString转换为UTF-8编码的QByteArray
    QByteArray byteArray = input.toUtf8();
    // 转换为16进制字符串
    return QString::fromLatin1(byteArray.toHex());
}
